package jwr.basic;

import java.util.Scanner;

import javax.xml.ws.handler.MessageContext.Scope;

public class J21_BookdbMain {
	// 서비스 클래스, 키보드 입력 클래스는 객체 생성없이 바로 사용할 수 있도록
	// static으로 선언
	private static J20_BookdbDAO srv = new J20_BookdbDAO();
	private static Scanner sc = new Scanner(System.in);
	
	
	private static final String MENU = "삽입(a), 삭제(b), 수정(c), 조회(d), 종료(q)";
	private static final String SELECTMSG = "보고싶은 id를 입력해주세요. 모두 보고싶다면 0";
	private static final String INSERTMSG = "제목, 출판사, 작가 순으로 입력 >>";
	private static final String DELETEMSG = "삭제할 id를 입력해주세요. >>";
	private static final String UPDATEMSG = "수정할 id를 입력해주세요. >>";
	private static final String UPDATEMSG2 = "title, publisher, author 순으로 입력해주세요. >>";
	
	
	public static void main(String[] args) {
		while(true){
		System.out.println(MENU);
			switch(sc.next()){
				case "q": sc.close(); System.out.println("종료되었습니다"); System.exit(0); ;break;
				case "a": newBook();break;
				case "b": removeBook();break;
				case "c": modifyBook();break;
				case "d": 
					System.out.println(SELECTMSG);
					int cnt=sc.nextInt();
					switch(cnt){
						case 0:
							readBook();
							break;
						default:
							readOneBook(cnt);
							break;
					}
				break;
			}
		}
	}
	
	// Main 클래스에서 DAO클래스의 메서드를 직접 호출하는 것은 OOP개념에 다소 위배
	
	// 캡슐화와 보안, 유지보수 관점에서 볼때 서비스 객체를 하나 더 만들어
	// 그것을 통해 DAO클래스의 메서드를 호출하는 것이 더 나음
	
	// 즉, Main -> DAO 보다는 Main -> service -> DAO가 나음
	
	// DAO클래스의 메서드를 호출하는 서비스 메서드를 static으로 선언
	
	public static void newBook(){
		readBook();
		System.out.print(INSERTMSG);
		J20_BookdbVO bvo = new J20_BookdbVO(sc.next(), sc.next(), sc.next());
		System.out.println(srv.insertBook(bvo)+" 개의 명령어 실행 되었습니다.");
	}
	public static void readBook(){
		System.out.println(srv.selectBook());
	};
	
	public static void readOneBook(int cnt){
		String id= String.valueOf(cnt);
		System.out.println(srv.selectBook(id));
	};
	
	public static void modifyBook(){
		readBook();
		System.out.println(UPDATEMSG);
		String id=sc.next();
		System.out.println(UPDATEMSG2);
		J20_BookdbVO bvo = new J20_BookdbVO(sc.next(), sc.next(), sc.next());
		bvo.setId(id);
		srv.updateBook(bvo);
	};
	
	public static void removeBook(){
		readBook();
		System.out.println(DELETEMSG);
		
		System.out.println(srv.deleteBook(sc.next())+" 개의 명령어 실행 되었습니다.");
	};
	
}
